ng911ok.lib.misc module#
misc.py – ArcGIS Python Toolbox Tool “misc.py”
Notes#
TODO SYPNOPSIS :synopsis: :authors: Riley Baird (OK), Emma Baker (OK) :created: August 02, 2024 :modified: January 02, 2025
- exception AttributeConversionError(original_value: str | int | float | datetime | date | time | Geometry | None, target_field: NG911Field, *args)#
Bases:
ValueError
- exception MixedZeroParityError#
Bases:
ExceptionException for use in the following situations involving inconsistent parity:
Given an address range, one bound is zero, but the other is non-zero.
Given a parity and an address range, the parity is zero, but one or both range bounds are non-zero.
Given a parity and an address range, the parity is not zero, but one or both range bounds are zero.
- class NGUIDAssignMethod(value)#
Bases:
StrEnumMethods of NGUID assignment.
- _generate_next_value_(start, count, last_values)#
Return the lower-cased version of the member name.
- COPY = 'COPY'#
Method that simply copies existing NGUID attributes to an NGUID field. Intended for field mapping operations.
- LOCAL = 'LOCAL'#
Method in which the local ID and agency ID are provided and used to build a complete NGUID. Requires populated
Local_IDandAgency_IDfields.
- NGUID = 'NGUID'#
Method in which the local ID is extracted from an existing NGUID, which is then used with a provided agency ID to build a complete NGUID. Requires populated
Agency_IDand NGUID fields. Conversion from v2.2 NGUIDs is supported with this method.
- NULL = 'NULL'#
NGUID attributes are set to null.
- SEQUENTIAL = 'SEQUENTIAL'#
Method in which sequential numbers, starting with 1, are assigned as the local IDs and used with a provided agency ID to build a complete NGUID. Requires a populated
Agency_IDfield.
- class Parity(value)#
Bases:
StrEnum- classmethod from_modulo_result(value: int, use_na: bool = False) Self | None | NAType#
- classmethod from_modulo_result_series(series: Series) Series#
- _generate_next_value_(start, count, last_values)#
Return the lower-cased version of the member name.
- BOTH = 'BOTH'#
- EVEN = 'EVEN'#
- ODD = 'ODD'#
- ZERO = 'ZERO'#
- class _AttrsInstanceWithAllowedFields(*args, **kwargs)#
Bases:
Protocol- _abc_impl = <_abc._abc_data object>#
- _is_protocol = True#
- class _AttrsInstanceWithFeatureClassPath(*args, **kwargs)#
Bases:
Protocol- _abc_impl = <_abc._abc_data object>#
- _is_protocol = True#
- all_values_selected(parameter: Parameter) bool#
Returns whether a multivalue
arcpy.Parameterhas all values in its filter list selected.
- arc_field_details(field: Field) str#
- calculate_parity(data: int) Literal[Parity.ODD, Parity.EVEN, Parity.ZERO]#
- calculate_parity(data: Sequence[int], summarize: Literal[False]) list[Literal[Parity.ODD, Parity.EVEN, Parity.ZERO]]
- calculate_parity(data: Sequence[int], summarize: Literal[True]) Parity
- check_user_fc_for_fields(fc_path: str | None, parameter_field_table: list[list[str]] | list[str], error_list: list[str], std_idx: int = 0, user_idx: int = 1) tuple[list[str], list[list[str]]]#
- convert_attribute_value(value: _T_FAV, target_field: NG911Field) str | int | float | datetime | date | time | Geometry | None#
Given an attribute value from a feature, attempt to convert it to the appropriate type indicated by target_field.
- Parameters:
value – Attribute value to convert
target_field – Field that value should be valid for
- Returns:
Equivalent value of appropriate type
- Raises:
AttributeConversionError – If value is not valid for target_field
- get_field_info_for_fc_creation(fc_fields) list[list[str | int | None]]#
- indent(lines: _T_indent) _T_indent#
- na_eq(val1: Any, val2: Any)#
Compares any two values, testing for equality. Unline the
==operator, however, this function will returnTrueif both val1 and val2 are consideredNAbypandas, such aspandas.NAandnumpy.nan.- Parameters:
val1 (Any) – Any object
val2 (Any) – Any object
- Returns:
Whether val1 and val2 are equal or both
NA- Return type:
bool
- na_in_list(val1: Any, in1: Any)#
- na_in_set(in1: Any, in2: Any)#
- params_to_dict(targets: Sequence[Parameter]) dict[str, Parameter]#
- qquote(strings: Iterable[str]) list[str]#
Surrounds each string in strings with double quotes.
- quote(strings: Iterable[str]) list[str]#
Surrounds each string in strings with single quotes.
- strjoin(strings: Iterable[str], joiner: str, *, q=False, qq=False) str#
- unwrap(target: Parameter) ArcSDESQLExecute | Extent | Field | FieldInfo | FieldMap | FieldMappings | Index | Point | RandomNumberGenerator | RecordSet | SpatialReference | bool | float | int | str | datetime | None | list[ArcSDESQLExecute | Extent | Field | FieldInfo | FieldMap | FieldMappings | Index | Point | RandomNumberGenerator | RecordSet | SpatialReference | bool | float | int | str | datetime | None]#
- unwrap(target: Sequence[Parameter]) list[ArcSDESQLExecute | Extent | Field | FieldInfo | FieldMap | FieldMappings | Index | Point | RandomNumberGenerator | RecordSet | SpatialReference | bool | float | int | str | datetime | None | list[ArcSDESQLExecute | Extent | Field | FieldInfo | FieldMap | FieldMappings | Index | Point | RandomNumberGenerator | RecordSet | SpatialReference | bool | float | int | str | datetime | None]]
Extracts the value(s) from
arcpy.Parameterobject(s).- Parameters:
target (Union[Parameter, Sequence[Parameter]]) – Parameter object or Sequence thereof
- Returns:
List of usable objects representing the inputs
- Return type:
Union[GPParameterValue, list[GPParameterValue]]
- unwrap_to_dict(targets: Sequence[Parameter]) dict[str, ArcSDESQLExecute | Extent | Field | FieldInfo | FieldMap | FieldMappings | Index | Point | RandomNumberGenerator | RecordSet | SpatialReference | bool | float | int | str | datetime | None | list[ArcSDESQLExecute | Extent | Field | FieldInfo | FieldMap | FieldMappings | Index | Point | RandomNumberGenerator | RecordSet | SpatialReference | bool | float | int | str | datetime | None]]#
- validate_field_exists(instance: _AttrsInstanceWithAllowedFields | _AttrsInstanceWithFeatureClassPath, attribute: attrs.Attribute[_T_Field], value: _T_Field) None#
A function compatible with the
validatorargument ofattrs.Fieldin cases where a field name orNG911Fieldinstance is passed as the value of theattrs.Field. AValueErroris raised if value is not among the allowed/existing fields.- Parameters:
instance – An
attrsobject with either an__ng911_allowed_fields__attribute or an__ng911_feature_class_path__attributeattribute – The
attrs.Attributeobjectvalue – Value of the attribute
- wrap_string(string: str, *wrappers: str) str#
Surrounds string with wrappers. If one argument is provided for wrappers, it will be placed both before and after string. If two arguments are provided, the first will be prepended and the second will be appended to string.
- wrap_strings(strings: Iterable[str], *wrappers: str) list[str]#
Surrounds each member of strings with wrappers. If one argument is provided for wrappers, it will be placed both before and after each member of strings. If two arguments are provided, the first will be prepended and the second will be appended to each member of strings.
- DOMAIN_TYPES: FrozenDict[str, str] = FrozenDict({'CODED': 'CodedValue', 'RANGE': 'Range'})#
Mapping of domain type keywords where keys are those used in domain creation and values are the corresponding keywords found in
arcpy.da.Domain.domainType.
- FIELD_DATA_TYPES: FrozenDict[Literal['SHORT', 'LONG', 'BIGINTEGER', 'FLOAT', 'DOUBLE', 'TEXT', 'DATE', 'DATEHIGHPRECISION', 'DATEONLY', 'TIMEONLY', 'TIMESTAMPOFFSET', 'BLOB', 'GUID', 'RASTER'], Literal['Geometry', 'SmallInteger', 'Integer', 'BigInteger', 'Single', 'Double', 'String', 'Date', 'DateOnly', 'TimeOnly', 'TimestampOffset', 'Guid', 'Raster']] = FrozenDict({'SHORT': 'SmallInteger', 'LONG': 'Integer', 'BIGINTEGER': 'BigInteger', 'FLOAT': 'Single', 'DOUBLE': 'Double', 'TEXT': 'String', 'DATE': 'Date', 'DATEHIGHPRECISION': 'Date', 'DATEONLY': 'DateOnly', 'TIMEONLY': 'TimeOnly', 'TIMESTAMPOFFSET': 'TimestampOffset', 'BLOB': 'Blob', 'GUID': 'Guid', 'RASTER': 'Raster'})#
Mapping of field data type keywords where keys are those used in field creation and values are the corresponding keywords found in
arcpy.Field.type(andconfig.yml).
- FIELD_TYPE_KEYWORDS: FrozenDict[Literal['Geometry', 'SmallInteger', 'Integer', 'BigInteger', 'Single', 'Double', 'String', 'Date', 'DateOnly', 'TimeOnly', 'TimestampOffset', 'Guid', 'Raster'], Literal['SHORT', 'LONG', 'BIGINTEGER', 'FLOAT', 'DOUBLE', 'TEXT', 'DATE', 'DATEHIGHPRECISION', 'DATEONLY', 'TIMEONLY', 'TIMESTAMPOFFSET', 'BLOB', 'GUID', 'RASTER']] = FrozenDict({'SmallInteger': 'SHORT', 'Integer': 'LONG', 'BigInteger': 'BIGINTEGER', 'Single': 'FLOAT', 'Double': 'DOUBLE', 'String': 'TEXT', 'Date': 'DATEHIGHPRECISION', 'DateOnly': 'DATEONLY', 'TimeOnly': 'TIMEONLY', 'TimestampOffset': 'TIMESTAMPOFFSET', 'Blob': 'BLOB', 'Guid': 'GUID', 'Raster': 'RASTER'})#
Mapping of field data type keywords where keys are those found in
arcpy.Field.type(andconfig.yml) and values are the corresponding keywords used in field creation. In this mapping,Dateis mapped toDATEHIGHPRECISION, notDATE.
- FeatureAttributeErrorCode#
The specific error codes for use with
FeatureAttributeErrorMessage. These values should be succinct indicators of the type of error that a Toolkit user could look up in an error glossary for more information than can reasonably be provided in the error table.alias of
Literal[‘ERROR:DOMAIN:INVALID_VALUE’, ‘ERROR:GENERAL:INVALID_VALUE’, ‘ERROR:GENERAL:MANDATORY_IS_NULL’, ‘ERROR:GENERAL:MANDATORY_IS_BLANK’, ‘ERROR:GENERAL:NOT_UPPERCASE’, ‘ERROR:GENERAL:UNIQUENESS’, ‘WARNING:GENERAL:LEADING_TRAILING_SPACE’, ‘ERROR:NGUID:FORMAT’, ‘ERROR:NGUID:V2_FORMAT’, ‘ERROR:NGUID:AGENCY’, ‘ERROR:NGUID:LAYER’, ‘ERROR:NGUID:DUPLICATE’, ‘ERROR:ADDRESS:DUPLICATE’, ‘ERROR:ADDRESS_RANGE:OVERLAP’, ‘ERROR:ADDRESS_RANGE:DECREASING’, ‘ERROR:ROAD_ESN:DEVIATION’, ‘ERROR:ROAD_ESN:CROSSING’, ‘ERROR:ROAD_ESN:OUT_OF_BOUNDS’, ‘ERROR:PARITY:EXPECTED_ZERO’, ‘ERROR:PARITY:EXPECTED_NONZERO’, ‘ERROR:PARITY:MISMATCH’, ‘ERROR:PARITY:INVALID’, ‘ERROR:PARITY:NULL’, ‘ERROR:LEGACY:MISMATCH’, ‘ERROR:GEOCODE:UNKNOWN_MATCH’, ‘ERROR:GEOCODE:WRONG_SIDE’, ‘ERROR:GEOCODE:BOTH_SIDES’, ‘ERROR:GEOCODE:WRONG_COMMUNITY’, ‘ERROR:GEOCODE:OUT_OF_RANGE’, ‘ERROR:GEOCODE:NAME_MISMATCH’, ‘ERROR:CONSISTENCY:ADDRESS_ESN’, ‘ERROR:CONSISTENCY:ROAD_ESN’, ‘ERROR:CONSISTENCY:COMMUNITY’, ‘WARNING:CONSISTENCY:ROAD_LEVEL’, ‘WARNING:CONSISTENCY:ROAD_ESN’, ‘ERROR:GEOMETRY:TOPOLOGY’, ‘WARNING:GEOMETRY:CUTBACK’, ‘WARNING:GEOMETRY:SHORT_SEGMENT’, ‘NOTICE:CONSISTENCY:ROAD_ESN’]
- GDBErrorCode#
The specific error codes for use with
GDBErrorMessage. These values should be succinct indicators of the type of error that a Toolkit user could look up in an error glossary for more information than can reasonably be provided in the error table.alias of
Literal[‘ERROR:PYTHON:EXCEPTION’, ‘ERROR:GDB:MISSING_REQUIRED_DATASET’, ‘ERROR:GDB:MISSING_REQUIRED_FEATURE_CLASS’, ‘ERROR:GDB:EXTRA_ITEM’, ‘ERROR:GDB:MISSING_DOMAIN’, ‘ERROR:GDB:EXTRA_DOMAIN’, ‘ERROR:GDB:INCORRECT_DOMAIN_TYPE’, ‘ERROR:GDB:DOMAIN_MISSING_CODE’, ‘ERROR:GDB:DOMAIN_EXTRA_CODE’, ‘ERROR:GDB:DOMAIN_CODE_VALUE_MISMATCH’, ‘ERROR:GDB:INCORRECT_DOMAIN_DESCRIPTION’, ‘ERROR:DATASET:INCORRECT_SPATIAL_REFERENCE’, ‘ERROR:DATASET:MISSING_TOPOLOGY’, ‘ERROR:DATASET:INCORRECT_TOPOLOGY’, ‘ERROR:DATASET:TOPOLOGY_VIOLATION’, ‘ERROR:FEATURE_CLASS:MISSING_REQUIRED_FIELD’, ‘ERROR:FEATURE_CLASS:EXTRA_FIELD’, ‘ERROR:FEATURE_CLASS:INCORRECT_SPATIAL_REFERENCE’, ‘ERROR:FEATURE_CLASS:INCORRECT_GEOMETRY_TYPE’, ‘ERROR:FEATURE_CLASS:INCORRECT_FEATURE_TYPE’, ‘ERROR:FEATURE_CLASS:EMPTY’, ‘ERROR:FEATURE_CLASS:EMPTY_SUBMISSION’, ‘ERROR:FIELD:INCORRECT_FIELD_TYPE’, ‘ERROR:FIELD:INCORRECT_FIELD_LENGTH’, ‘ERROR:FIELD:INCORRECT_FIELD_DOMAIN’, ‘NOTICE:GDB:MISSING_OPTIONAL_DATASET’, ‘NOTICE:GDB:MISSING_OPTIONAL_FEATURE_CLASS’]
- Severity#
The three severity levels of
ValidationErrorMessageinstances.alias of
Literal[‘Notice’, ‘Warning’, ‘Error’]
- ValidationCategory#
The categories under which validation routines are grouped.
alias of
Literal[‘Geodatabase’, ‘General Feature Class’, ‘Address Point’, ‘Road Centerline’]